/*********************************************************************************************************
* 模块名称：Queue.h
* 摘    要：Queue模块
* 当前版本：1.0.0
* 作    者：
* 完成日期：2021年07月01日 
* 内    容：
* 注    意：                                                                  
**********************************************************************************************************
* 取代版本：
* 作    者：
* 完成日期：
* 修改内容：
* 修改文件：
*********************************************************************************************************/
#ifndef _QUEUE_H_
#define _QUEUE_H_

/*********************************************************************************************************
*                                              包含头文件
*********************************************************************************************************/

/*********************************************************************************************************
*                                              宏定义
*********************************************************************************************************/

/*********************************************************************************************************
*                                              枚举结构体
*********************************************************************************************************/
//定义数据类型，即队列中元素的数据类型
typedef unsigned char  DATA_TYPE;

//定义循环队列结构体
typedef struct
{
  signed short       front;    //头指针，队非空时指向队头元素
  signed short       rear;     //尾指针，队非空时指向队尾元素的下一个位置
  signed short       bufLen;   //队列的总容量
  signed short       elemNum;  //当前队列中的元素的数量
  DATA_TYPE *pBuffer;          //循环队列的缓冲区
}StructCirQue;

/*********************************************************************************************************
*                                              API函数声明
*********************************************************************************************************/
void  InitQueue(StructCirQue* pQue, DATA_TYPE* pBuf, signed short len);           //初始化队列
void  ClearQueue(StructCirQue* pQue);                                             //清队列
unsigned char    QueueEmpty(StructCirQue* pQue);                                  //判断队列是否为空，1为空，0为非空
signed short   QueueLength(StructCirQue* pQue);                                   //返回队列中元素个数，即为队列的长度
signed short   EnQueue(StructCirQue* pQue, DATA_TYPE* pInput, signed short len);  //入队len个元素
signed short   DeQueue(StructCirQue* pQue, DATA_TYPE* pOutput, signed short len); //出队len个元素

#endif
